
/**
 * 当一个嵌套的内部(子)函数引用了嵌套的外部(父)函数的变量(函数)时，就产生了闭包,如下
 */

function createFunction(){
	var result = new Array();

	for (var i = 0; i < 10; i++) {
		result[i] = function(){
			console.log(i);
			return i;
		}
	}
	return result;
}

//这个时候每个result 里面的函数返回的 i 都是10
console.log('================') 
createFunction();


我们可以使用匿名函数强制让闭包的行为符合预期
function createFunction(){
	var result = new Array();

	for (var i = 0; i < 10; i++) {
		result[i] = function(num){
			return function(){
				return num;
			}
		}(i);
	}
	return result;
}
